<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function Parent(name) {
            this.name = name || '干饭人';
            this.run = function () {
                console.log(this.name + '干饭');
            }
        }
        Parent.prototype.say = function () {
            console.log('我是' + this.name);
        } 

        function Child(name,time){
            //在子类构造函数中通过Parent.call(this),继承父类的属性
            Parent.call(this,name);
            this.time = time || '十二点';
        }
        //改变子类的原型为父类的实例
        Child.prototype = new Parent();

        //实例化子类
        let son = new Child('干饭魂','六点半');
        son.say();//我是干饭魂  通过原型链找到Partent的原型的方法，然后调用
        son.run();//干饭魂干饭 

        /*
        优点： 1.可以继承实例属性/方法，也可以继承原型属性/方法
              2.不存在引用属性共享问题
              3.可以传参数
              4.函数可以复用
        缺点：创建的实例和原型上存在两份相同的属性(run和name)
        
        */
    </script>
</body>

</html>